package team.glh.demo;

import com.alibaba.fastjson.JSON;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author:Gan Linghao
 * @date:2020/4/22
 * @time:16:05
 * @description:no description
 */
public class XmlToExcelUtil3 {

    static List<List<Object>> lists = new ArrayList<>();

     DeviceVO1 dev = new DeviceVO1();
    public List<List<Object>> toExcel(Integer id, String fileName) {

        DeviceVO1 deviceVO1 = new DeviceVO1();

        // 创建saxReader对象
        SAXReader reader = new SAXReader();
        // 通过read方法读取一个文件 转换成Document对象
        Document document = null;
        try {
            document = reader.read(new File(fileName));
            //获取根节点元素对象
            Element root = document.getRootElement();

            //遍历所有的元素节点
            XmlToExcelUtil3 xmlToExcelUtil1 = new XmlToExcelUtil3();
            deviceVO1 = xmlToExcelUtil1.listNodes(root);
            deviceVO1.setOrderNumber(id);

            List<Object> list = new ArrayList<>();
            list.add(id);
            list.add(deviceVO1.getOid());
            list.add(deviceVO1.getVendorName());
            list.add(deviceVO1.getCategoryName());
            list.add(deviceVO1.getDeviceType());

            lists.add(list);
            System.out.println("对象："+JSON.toJSONString(deviceVO1));

        } catch (DocumentException e) {
            e.printStackTrace();
        }finally {
            return lists;
        }

    }
    /**
     * 遍历当前节点元素下面的所有(元素的)子节点
     *
     * @param node
     */
    StringBuffer buffer = new StringBuffer();
    public DeviceVO1 listNodes(Element node) {
//        System.out.println("当前节点的名称：：" + node.getName());
        // 获取当前节点的所有属性节点
        List<Attribute> list = node.attributes();

        // 遍历属性节点
        for (Attribute attr : list) {
           if ("CustomDevicePackage".equals(node.getName()) && "deviceType".equals(attr.getName())) {
                dev.setDeviceType(attr.getValue());
           }
            if ("SysOID".equals(node.getName()) && "oid".equals(attr.getName())) {
                buffer.append(attr.getValue()).append(";");
                dev.setOid(buffer.toString());
            }
            if ("Category".equals(node.getName()) && "name".equals(attr.getName())) {
                dev.setCategoryName(attr.getValue());
            }
            if ("Vendor".equals(node.getName()) && "name".equals(attr.getName())) {
                dev.setVendorName(attr.getValue());
            }
        }
        // 当前节点下面子节点迭代器
        Iterator<Element> it = node.elementIterator();
        // 遍历
        while (it.hasNext()) {
            // 获取某个子节点对象
            Element e = it.next();
            // 对子节点进行遍历
            listNodes(e);
        }

        if(null != dev.getVendorName()){
            return dev;
        }
        return null;
    }
}
